package com.example.codediff.model;

import lombok.Data;
import java.util.ArrayList;
import java.util.List;

/**
 * 调用链节点
 * 表示调用图中的一个方法节点
 */
@Data
public class CallNode {
    /**
     * 类名（包含包名）
     */
    private String className;

    /**
     * 方法名
     */
    private String methodName;

    /**
     * 方法描述符（参数和返回值类型）
     */
    private String methodDesc;

    /**
     * 调用此方法的方法列表
     */
    private List<CallNode> callers = new ArrayList<>();

    /**
     * 是否是变更点
     */
    private boolean modified;

    /**
     * 获取方法的完整签名
     */
    public String getFullSignature() {
        return className + "." + methodName + methodDesc;
    }

    /**
     * 获取可读性好的方法签名
     */
    public String getReadableSignature() {
        return className + "." + methodName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof CallNode)) return false;
        CallNode other = (CallNode) o;
        return getFullSignature().equals(other.getFullSignature());
    }

    @Override
    public int hashCode() {
        return getFullSignature().hashCode();
    }
}
